package control;

import dao.ProveedorDAO;
import java.util.ArrayList;
import entidad.Proveedor;

public class ControlProveedor {

    private ProveedorDAO dao;

    public ControlProveedor() {
        dao = new ProveedorDAO();
    }    

    public boolean verificarLongitudNombre(String nombre) {
        return (nombre.length() >= 6 && nombre.length() <= 18);
    }

    public boolean verificarLongitudNIT(Long nit) {
        return (nit >= 1000000000l && nit <= 9999999999l);
    }

    public boolean verificarLongitudNombredeContacto(String nombredeContacto) {
        return nombredeContacto.length() >= 6 && nombredeContacto.length() <= 18;
    }

    public boolean verificarLongitudCedula(long cedula) {
        return cedula >= 1000000l && cedula <= 39999999999l;
    }

    public boolean verificarLongitudTelefono(Long telefono) {
        return telefono >= 2000000 && telefono <= 9999999;
    }

    public boolean verificarLongitudUbicacion(String ubicacion) {
        return ubicacion.length() >= 6 && ubicacion.length() <= 30;
    }

    public String agregar(Proveedor proveedor) {
        // validacion hecha al agregar
        if (!verificarLongitudNombre(proveedor.getNombre())) {
            return "Nombre incorrecto";
        }
        if (!verificarLongitudNIT(proveedor.getNit())) {
            return "NIT incorrecto";
        }
        if (!verificarLongitudNombredeContacto(proveedor.getNombredeContacto())) {
            return "Nombre de contacto incorrecto";
        }
        if (!verificarLongitudCedula(proveedor.getCedula())) {
            return "Cédula incorrecta";
        }
        if (!verificarLongitudTelefono(proveedor.getTelefono())) {
            return "Teléfono incorrecto";
        }
        if (!verificarLongitudUbicacion(proveedor.getUbicacion())) {
            return "Longitud de ubicación incorrecta";
        }
        if (existe(proveedor)) {
            return "Proveedor ya existente";
        }

        dao.crear(proveedor);
        return "Proveedor agregado exitosamente!";
    }

    public String modificar(Proveedor proveedor) {
        // validacion hecha al agregar
        if (!verificarLongitudNombre(proveedor.getNombre())) {
            return "Nombre incorrecto";
        }
        if (!verificarLongitudNombredeContacto(proveedor.getNombredeContacto())) {
            return "Nombre de contacto incorrecto";
        }
        if (!verificarLongitudCedula(proveedor.getCedula())) {
            return "Cédula incorrecta";
        }
        if (!verificarCedulaProveedor(proveedor.getCedula())) {
            return "Cédula ya existente, ingrese otra";
        }
        if (!verificarLongitudTelefono(proveedor.getTelefono())) {
            return "Teléfono incorrecto";
        }
        if (!verificarLongitudUbicacion(proveedor.getUbicacion())) {
            return "Longitud de ubicación incorrecta";
        }
        
        dao.actualizar(proveedor, proveedor);
        return "Proveedor agregado exitosamente!";
    }
    
    public boolean eliminar(Proveedor proveedor){
        return dao.eliminar(proveedor);
    }

    public ArrayList<Proveedor> buscar(String str) {
        ArrayList<Proveedor> ret = new ArrayList<>();

        if(str.equals("")) dao.buscar("");
        
        String[] split = str.split(" ");
        for (int i=0; i<split.length; i++) {
            split[i] = split[i].trim();
            if (split[i].equals("")) continue;
            
            ArrayList<Proveedor> aux = dao.buscar(split[i]);            
            for (Proveedor p : aux) if (!ret.contains(p)) ret.add(p);
        }
        return ret;
    }

    private boolean verificarCedulaProveedor(long cedula) {
        /*
         * POR FAVOR NO MODIFICAR ESTO
         */
        for(Proveedor p : dao.leerT()){
            if(p.getCedula() == cedula) {
                return false;
            }
        }
        return true;
    }

//    private boolean verificarDatos(Proveedor proveedor) {
//        for (Proveedor p : sistema.getProveedores()) {
//            if (p.getNit() == proveedor.getNit() || p.getCedula() == proveedor.getCedula()) {
//                return false;
//            }
//        }
//        return true;
//    }

//    public boolean esLong(String cad) {
//        for (int i = 0; i < cad.length(); i++) {
//            if (!Character.isDigit(cad.charAt(i))) {
//                return false;
//            }
//        }
//        return true;
//    }
//
//    private boolean validarDominioDeDatos(String telefono, String cedula, String nit) {
//        return esLong(telefono) && esLong(cedula) && esLong(nit);
//    }

//    public String validarCampos(String nit, String telefono, String cedula) {
//        if(!validarDominioDeDatos(telefono,cedula,nit)){
//            return "Telefono, cédula y NIT solo admiten valores numéricos";
//        }
//        return "";        
//    }

    private boolean existe(Proveedor proveedor) {
        return (dao.leer(proveedor)!=null);
    }
}
